package com.locationtracker.plus.app.network

import com.google.gson.JsonObject
import com.locationtracker.plus.BuildConfig
import com.locationtracker.plus.data.model.bean.ApiResponse
import com.locationtracker.plus.data.model.bean.MemberResponse
import com.locationtracker.plus.data.model.bean.RechargeResponse
import com.locationtracker.plus.data.model.bean.UserInfo
import retrofit2.http.*

/**
 * 描述　: 网络API
 */
interface ApiService {

    companion object {
        const val SERVER_URL = BuildConfig.DOMAINAPP
    }

    /**
     * 获取短信验证码
     */
    @FormUrlEncoded
    @POST("api/auth/login/getVerifyCode")
    suspend fun sendCode(@Field("phone") phone: String, @Field("nation_code") nation_code: String): ApiResponse<Any?>

    /**
     * 短信验证码登录
     */
    @FormUrlEncoded
    @POST("api/auth/login")
    suspend fun login(@Field("phone") phone: String, @Field("code") code: String): ApiResponse<UserInfo>

    /**
     * 获取当前登录用户信息
     */
    @GET("api/user")
    suspend fun getUserInfo(): ApiResponse<UserInfo>

    /**
     * 用户上传自己的位置
     */
    @FormUrlEncoded
    @POST("api/user/positions")
    suspend fun uploadLocation(@Field("coordinate") coordinate: String, @Field("address") address: String): ApiResponse<Any?>

    /**
     * 获取自己的位置记录
     */
    @GET("api/user/positions")
    suspend fun myRoute(@Query("start_date") start_date: String, @Query("end_date") end_date: String): ApiResponse<JsonObject>

    /**
     * 获取好友的坐标信息
     */
    @GET("api/friends/{id}/positions")
    suspend fun friendRoute(@Path("id") id: String, @Query("start_date") start_date: String, @Query("end_date") end_date: String): ApiResponse<JsonObject>

    /**
     * 产品列表
     */
    @GET("api/products")
    suspend fun productList(): ApiResponse<ArrayList<RechargeResponse>>

    /**
     * IAP内购通知
     */
    @FormUrlEncoded
    @POST("api/orders/iap")
    suspend fun updatePayEvent(@Field("product_id") product_id: String): ApiResponse<Any?>

    /**
     * 用户好友列表
     */
    @GET("api/user/friends")
    suspend fun friendList(@Query("page") page: Int): ApiResponse<ArrayList<MemberResponse>>

    /**
     * 埋点
     */
    @FormUrlEncoded
    @Headers("Domain-Name: EventDomain")
    @POST("save.php?y8vi0u=sw2j3&quk7g=vkfcjdl&et2fy=po8e5")
    suspend fun eventUpdate(@FieldMap map: Map<String, @JvmSuppressWildcards Any>): Any?

    /**
     * 查询地理信息接口
     */
    @Headers("Domain-Name: GoogleMapDomain")
    @GET("geocode/json")
    suspend fun googleGeocode(@Query("latlng") latlng: String, @Query("key") key: String, @Query("language") language: String): JsonObject
}